package model

import (
	"gorm.io/gorm"
	"smart-health-platforms/config"
	"time"
)

type Achievement struct {
	Id                uint           `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	UserId            uint           `gorm:"column:user_id;type:bigint UNSIGNED;comment:用户id;not null;default:0;" json:"user_id"`                // 用户id
	RuleId            uint           `gorm:"column:rule_id;type:bigint UNSIGNED;comment:规则id;not null;default:0;" json:"rule_id"`                // 规则id
	AchievementName   string         `gorm:"column:achievement_name;type:varchar(255);comment:成就名称;not null;" json:"achievement_name"`           // 成就名称
	AchievementDesc   string         `gorm:"column:achievement_desc;type:varchar(255);comment:成就描述;not null;" json:"achievement_desc"`           // 成就描述
	AchievementImages string         `gorm:"column:achievement_images;type:varchar(255);comment:成就图片;not null;" json:"achievement_images"`       // 成就图片
	IsLighted         uint           `gorm:"column:is_lighted;type:int UNSIGNED;comment:是否点亮：1：已点亮 2：未点亮;not null;default:0;" json:"is_lighted"` // 是否点亮：1：已点亮 2：未点亮
	LightedTime       time.Time      `gorm:"column:lighted_time;type:datetime(3);comment:点亮时间;" json:"lighted_time"`                             // 点亮时间
	Status            uint           `gorm:"column:status;type:int UNSIGNED;comment:成就状态：1：启用 2：禁用;not null;default:0;" json:"status"`           // 成就状态：1：启用 2：禁用
	CreatedAt         time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt         time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt         gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (achi *Achievement) TableName() string {
	return "achievement"
}

// 根据成就名称查找成就
func (achi *Achievement) GetAchievementByName(achievementName string) error {
	return config.DB.Where("achievement_name = ?", achievementName).Limit(1).Find(&achi).Error
}

// 成就添加
func (achi *Achievement) CreateAchievement() error {
	return config.DB.Create(&achi).Error
}

// 成就点亮
func (achi *Achievement) LightAchievement(id int) error {
	return config.DB.Where("id = ?", id).Updates(&achi).Error
}

// 成就展示
func (achi *Achievement) GetAchievementList(IsLighted int) (achievementList []*Achievement, err error) {
	err = config.DB.Where("is_lighted = ?", IsLighted).Find(&achievementList).Error
	return
}
